package comgame.entities;

import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.entity.Entity;
import comgame.components.ItemComponent;
import comgame.scenes.ItemManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Shop {
    public enum PurchaseResult {
        SUCCESS,                   // 购买成功
        FAIL_INSUFFICIENT_FUNDS,   // 失败：金币不足
        FAIL_INVENTORY_FULL,       // 失败：背包已满
        FAIL_OUT_OF_STOCK,         // 失败：商品缺货（如果实现了库存系统）
        FAIL_UNKNOWN               // 其他未知错误
    }
    private final List<Entity> availableItems = new ArrayList<>();

    public void initializeShop(Player player) {
        // 1. 创建所有可购买的商品实体
        createItem("普通头盔", 150, "HELMET");
        createItem("铁头盔", 350, "HELMET");
        createItem("金头盔", 600, "HELMET");
        createItem("钻石头盔", 900, "HELMET");
        createItem("普通胸甲", 300, "CHESTPLATE");
        createItem("铁胸甲", 650, "CHESTPLATE");
        createItem("金胸甲", 1000, "CHESTPLATE");
        createItem("钻石胸甲", 1500, "CHESTPLATE");
        createItem("普通护腿", 200, "LEGGINGS");
        createItem("铁护腿", 400, "LEGGINGS");
        createItem("金护腿", 700, "LEGGINGS");
        createItem("钻石护腿", 1000, "LEGGINGS");
        createItem("普通靴子", 150, "BOOTS");
        createItem("铁靴子", 350, "BOOTS");
        createItem("金靴子", 600, "BOOTS");
        createItem("钻石靴子", 9000, "BOOTS");
        createItem("普通剑", 200, "SWORD");
        createItem("铁剑", 500, "SWORD");
        createItem("金剑", 900, "SWORD");
        createItem("钻石剑", 1300, "SWORD");
        createItem("番茄种子", 50, "TOMATO");
        createItem("小麦种子", 50, "WHEAT");
        createItem("土豆种子", 50, "POTATO");
        createItem("胡萝卜种子", 50, "CARROT");
        createItem("星果种子", 50, "STARFRUIT");
    }

    private void createItem(String name, int price, String type) {
        Entity item = FXGL.entityBuilder()
                .with(new ItemComponent(name, price, type))
                .build();
        availableItems.add(item);
    }

    public PurchaseResult purchaseItem(Entity item, Player player) {
        ItemComponent comp = item.getComponent(ItemComponent.class);

        // 1. 检查玩家金币
        if (player.getMoney() < comp.getPrice()) {
            return PurchaseResult.FAIL_INSUFFICIENT_FUNDS;
        }

        // 2. 执行交易
        player.deductMoney(comp.getPrice());
        ItemManager.getInstance().addItem(comp.getItemName(), 1);

        return PurchaseResult.SUCCESS;
    }
    //防止修改
    public List<Entity> getAvailableItems() {
        return Collections.unmodifiableList(availableItems);
    }

}
